<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://unpkg.com/react@18.1.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18.1.0/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
    <title>Document</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      class Root extends React.Component {
        constructor() {
          super();
          // 约定：state里面，只存放组件模板中使用到的数据。更新数据时必须使用this.setState();
          this.state = {
            courses: [], // 保存课程信息的数据
            // curPage: 1, // 当前页码
          };

          this.curPage = 1; // 非组件模板使用的数据，可以单独声明为类属性使用；
          this.timer = null; // 声明定时器；
        }
        ajax = (url) => {
          fetch(url)
            .then((response) => response.json())
            .then(({ data }) => {
              this.setState({
                courses: data,
              });
            });
        };
        prevEvent = () => {
          // this.state.curPage--; // 这里可以直接修改数据，并且是同步修改，不用担心curPage是否会延迟更新，下面可以立刻获取最新数据。除了不能渲染页面。

          // this.setState({
          //   curPage: this.state.curPage + 1,
          // }) // 这里虽然修改curPage会执行render()，生成虚拟DOM，但是会存在无法立刻获取最新值的问题。
          // this.ajax(
          //   `https://www.lanqb.com/api/course/video/indexv3?type=3&page=${this.state.curPage}&limit=20`
          // );

          this.curPage--;
          this.ajax(
            `https://www.lanqb.com/api/course/video/indexv3?type=3&page=${this.curPage}&limit=20`
          );
        };
        nextEvent = () => {
          // this.state.curPage++;
          // this.ajax(
          //   `https://www.lanqb.com/api/course/video/indexv3?type=3&page=${this.state.curPage}&limit=20`
          // );

          this.curPage++;
          this.ajax(
            `https://www.lanqb.com/api/course/video/indexv3?type=3&page=${this.curPage}&limit=20`
          );
        };
        render() {
          // let { courses, curPage } = this.state;
          let { courses } = this.state;
          return (
            <div className="root">
              <button onClick={this.prevEvent}>上一页</button>
              <span>当前页码:{this.curPage}</span>
              <button onClick={this.nextEvent}>下一页</button>
              <hr />
              {courses.map((c) => (
                <h3>{c.title}</h3>
              ))}
            </div>
          );
        }
        componentDidMount() {
          this.ajax(
            `https://www.lanqb.com/api/course/video/indexv3?type=3&page=${this.state.curPage}&limit=20`
          );
        }
      }
      ReactDOM.render(<Root />, document.getElementById("app"));
    </script>
  </body>
</html>
